// Copyright (C) 2023 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
// 
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<北京小羊驼科技有限公司>，授权编号：<NT231212144350>，代码指纹：<A.702363430.550>，技术对接人微信：<ID: wxid_wbyootvkdcgj22>】
// 【授权寄送：<收件：苏先生、地址：北京市大兴区北京密码西区6号楼1单元301、电话：18613885610、邮箱：bd@huiyuanxiang-inc.com>】
// 
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
// 
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
package com.x52im.rainbowchat.im.dto;

import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;

/**
 * 指令body：群聊/世界频道聊天消息的数据内容封装类.
 * <p>
 * 即聊天数据从MobileIMSDK底层发送时，会将本对象转JSON字串后，作为
 * Protocal的dataContent数据进行传输。
 * 
 * @author Jack Jiang(http://www.52im.net/space-uid-1.html)
 * @version 1.0
 * @since 4.3
 */
public class MsgBody4Group extends MsgBody4Guest
{
	/** 
	 * 群聊消息扩散写前原始消息的指纹码。
	 * <p>
	 * 此指纹码目前主要用于消息“撤回”功能时。
	 * 且仅对由“人”发起的正常聊天消息有意义，对{@link MsgType#TYPE_SYSTEAM$INFO}类型的消息无意义。
	 */
	protected String parentFp = null;
	
	public MsgBody4Group()
	{
		super();
		this.cy = CHAT_TYPE_GROUP$CHAT;
	}
	
	public String getParentFp() {
		return parentFp;
	}
	public void setParentFp(String parentFp) {
		this.parentFp = parentFp;
	}

	/**
	 * 构造世界频道/普通群聊系统通知(消息)协议体的DTO对象.
	 *
	 * @msgType 聊天消息类型
	 * @param toGid 要发送到的群id
	 * @param msg 消息内容，纯文本字串，可能是聊天文字、图片文件名或语音文件名等，但一定不是JSON字串
	 * @return
	 */
	public static MsgBody4Group constructGroupSystenMsgBody(String toGid, String msg)
	{
//		MsgBody4Group tcmd = new MsgBody4Group();
//		tcmd.setF(srcUserUid);
//		tcmd.setNickName(srcNickName);
//		tcmd.setT(toGid);
//		tcmd.setM(msg);
//		tcmd.setTy(msgType);
//		tcmd.setCy(MsgBody4Group.CHAT_TYPE_GROUP$CHAT);
//		
//		return tcmd;
		
		return MsgBody4Group.constructGroupChatMsgBody(
				MsgBody4Group.TYPE_SYSTEAM$INFO
				// 此值一定是"0"，因为是服务端发给客户端的嘛
				, "0"
				// 服务端发送的系统级消息，没昵称
				, ""
				, toGid
				, msg
				, null);
	}
	
	/**
	 * 构造世界频道/普通群聊消息协议体的DTO对象.
	 *
	 * @msgType 聊天消息类型
	 * @param srcUserUid 发送方的uid
	 * @param srcNickName 发送方的昵称
	 * @param toGid 要发送到的群id
	 * @param msg 消息内容，纯文本字串，可能是聊天文字、图片文件名或语音文件名等，但一定不是JSON字串
	 * @param parentFp 群聊消息扩散写前原始消息的指纹码（此指纹码目前主要用于消息“撤回”功能时）
	 * @return
	 */
	public static MsgBody4Group constructGroupChatMsgBody(int msgType
			, String srcUserUid, String srcNickName, String toGid, String msg, String parentFp)
	{
		MsgBody4Group tcmd = new MsgBody4Group();
		tcmd.setF(srcUserUid);
		tcmd.setNickName(srcNickName);
		tcmd.setT(toGid);
		tcmd.setM(msg);
		tcmd.setTy(msgType);
		tcmd.setParentFp(parentFp);
		return tcmd;
	}
	
	/**
	 * 从JSON字串中反序列化。
	 * 
	 * @param originalMsg 即MsgBodyRoot对象的JSON序列化文本
	 * @return 解析成功则返回对象，否则返回null
	 * @since 2.0_rc11
	 */
	public static MsgBody4Group parseFromSender(String originalMsg)
	{
		try{
			return new Gson().fromJson(originalMsg, MsgBody4Group.class);
		}
		catch (JsonSyntaxException e){
			return null;
		}
	}
}
